#ifndef __EVENTFD_H__
#define __EVENTFD_H__

#include <functional>

using std::function;

class EventFd
{
    using EventFdCallback = function<void()>;
public:
    EventFd(EventFdCallback &&cb);
    /* EventFd(const EventFdCallback &cb); */
    ~EventFd();

    //启动与停止
    void start();
    void stop();

    //封住了read函数
    void handleRead();

    //封装了write函数
    void wakeup();

    //创建用于通信的文件描述符
    int createEventFd();

private:
    int _evtfd;//eventfd返回的文件描述符（也就是用于通信的文件描述符）
    EventFdCallback _cb;//线程被唤醒后需要执行的任务
    bool _isStarted;

};

#endif
